type IsEqual<A, B> = (<X>() => X extends A ? 1 : 2) extends (<X>() => X extends B ? 1 : 2)  ?  true : false
type Includes<T extends any[], U> = 
  T extends [infer F, ...infer R] ? 
    IsEqual<F, U> extends true ? true : Includes<R, U>
    :false